Entity Framework Core (EF Core)

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core)
337
337

Entity Framework Core (EF Core) হলো Microsoft-এর তৈরি একটি Object Relational Mapper (ORM), যা ডেভেলপারদের ডেটাবেসের সঙ্গে ইন্টারঅ্যাক্ট করার জন্য একটি উচ্চ-স্তরের অ্যাবস্ট্রাকশন সরবরাহ করে। এটি .NET Core এবং .NET Framework-এ সমর্থিত এবং ডেটাবেস অপারেশনগুলিকে সহজ, দ্রুত এবং কার্যকর করে তোলে।

EF Core ডেভেলপারদের ডেটাবেসে সরাসরি SQL কোড লিখা ছাড়াই ডেটা পরিচালনা করতে দেয় এবং Code First এবং Database First পদ্ধতি সমর্থন করে।


EF Core এর প্রধান বৈশিষ্ট্য

  • Cross-Platform Support: Windows, macOS এবং Linux-এ কাজ করে।
  • LINQ Integration: LINQ ব্যবহার করে ডেটাবেসের উপর কুয়েরি চালানো যায়।
  • Code First এবং Database First Approach: ডেভেলপারদের প্রয়োজন অনুযায়ী ডেটাবেস মডেল তৈরি বা বিদ্যমান ডেটাবেস ব্যবহার করতে দেয়।
  • বিভিন্ন ডেটাবেস সাপোর্ট: EF Core MySQL, SQL Server, PostgreSQL, SQLite ইত্যাদি ডেটাবেস সমর্থন করে।
  • Migration System: ডেটাবেস স্কিমা পরিবর্তন করার জন্য শক্তিশালী মাইগ্রেশন সিস্টেম সরবরাহ করে।

EF Core সেটআপ

প্রয়োজনীয় প্যাকেজ ইন্সটল করা

EF Core ব্যবহার করার জন্য আপনাকে প্রয়োজনীয় NuGet প্যাকেজ ইন্সটল করতে হবে।

SQL Server ব্যবহার করার জন্য:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Tools প্যাকেজ ইন্সটল:

dotnet add package Microsoft.EntityFrameworkCore.Tools

SQLite ব্যবহার করার জন্য (ঐচ্ছিক):

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

EF Core এর মূল ধারণা

DbContext

DbContext হলো EF Core-এর কেন্দ্রীয় কম্পোনেন্ট, যা ডেটাবেস এবং ডেটা মডেলের মধ্যে যোগাযোগ করে। এটি আপনার ডেটাবেস কনফিগারেশন এবং CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করে।

Model

Model হলো ডেটাবেস টেবিলের প্রতিনিধিত্বকারী ক্লাস। প্রতিটি প্রপার্টি ডেটাবেস কলামের সাথে সংযুক্ত।

LINQ (Language Integrated Query)

EF Core LINQ ব্যবহার করে ডেটাবেসের উপর কুয়েরি চালায়, যা ডেভেলপারদের SQL-এর পরিবর্তে C# কোড দিয়ে ডেটা রিট্রিভ করতে দেয়।


Code First পদ্ধতি

Code First পদ্ধতিতে ডেভেলপার প্রথমে মডেল ক্লাস তৈরি করে এবং তারপরে ডেটাবেস তৈরি করে।

মডেল ক্লাস তৈরি করা:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

DbContext তৈরি করা:

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Your_Connection_String");
    }
}

ডেটাবেস মাইগ্রেশন তৈরি করা:

dotnet ef migrations add InitialCreate

ডেটাবেস আপডেট করা:

dotnet ef database update

Database First পদ্ধতি

Database First পদ্ধতিতে বিদ্যমান ডেটাবেস থেকে মডেল তৈরি করা হয়।

Database First ব্যবহার:

EF Core Tools দিয়ে বিদ্যমান ডেটাবেস থেকে মডেল ক্লাস জেনারেট করতে নিচের কমান্ড ব্যবহার করুন:

dotnet ef dbcontext scaffold "Your_Connection_String" Microsoft.EntityFrameworkCore.SqlServer

CRUD অপারেশন

ডেটা তৈরি করা (Create):

using (var context = new AppDbContext())
{
    var product = new Product { Name = "Laptop", Price = 800.00M };
    context.Products.Add(product);
    context.SaveChanges();
}

ডেটা পড়া (Read):

using (var context = new AppDbContext())
{
    var products = context.Products.ToList();
    foreach (var product in products)
    {
        Console.WriteLine($"Name: {product.Name}, Price: {product.Price}");
    }
}

ডেটা আপডেট করা (Update):

using (var context = new AppDbContext())
{
    var product = context.Products.FirstOrDefault(p => p.Id == 1);
    if (product != null)
    {
        product.Price = 750.00M;
        context.SaveChanges();
    }
}

ডেটা মুছে ফেলা (Delete):

using (var context = new AppDbContext())
{
    var product = context.Products.FirstOrDefault(p => p.Id == 1);
    if (product != null)
    {
        context.Products.Remove(product);
        context.SaveChanges();
    }
}

LINQ ব্যবহার করে কুয়েরি চালানো

EF Core LINQ ব্যবহার করে ডেটা কুয়েরি করার জন্য একটি শক্তিশালী টুল প্রদান করে:

ফিল্টারিং:

var expensiveProducts = context.Products.Where(p => p.Price > 500).ToList();

সাজানো (Sorting):

var sortedProducts = context.Products.OrderBy(p => p.Name).ToList();

নির্দিষ্ট ডেটা বাছাই (Projection):

var productNames = context.Products.Select(p => p.Name).ToList();

ডেটাবেস মাইগ্রেশন

EF Core মাইগ্রেশন ডেটাবেসের স্কিমা পরিবর্তন করার জন্য একটি শক্তিশালী পদ্ধতি প্রদান করে।

নতুন মাইগ্রেশন তৈরি:

dotnet ef migrations add AddCategoryColumn

ডেটাবেস আপডেট করা:

dotnet ef database update

মাইগ্রেশন রোলব্যাক:

dotnet ef database update PreviousMigrationName

EF Core এর সুবিধা

  • SQL লিখার প্রয়োজন কম, কারণ LINQ দিয়ে ডেটা পরিচালনা করা যায়।
  • ডেটাবেস ইন্ডিপেনডেন্ট: একাধিক ডেটাবেসের সাথে কাজ করার সুবিধা।
  • ডেটাবেস স্কিমা ম্যানেজমেন্ট সহজ।
  • টেস্টিং এবং ডেটা ভ্যালিডেশনে সহায়ক।

EF Core একটি শক্তিশালী ORM টুল যা ডেভেলপারদের ডেটাবেসের সাথে কাজ করা সহজ করে তোলে। এর Code First এবং Database First পদ্ধতি ডেভেলপারদের তাদের চাহিদা অনুযায়ী ডেটাবেস পরিচালনা করতে দেয়। LINQ সমর্থন এবং মাইগ্রেশন সিস্টেম এটিকে আরও কার্যকর এবং ডেভেলপমেন্ট ফ্রেন্ডলি করে তুলেছে।

common.content_added_by

EF Core এর পরিচিতি এবং সেটআপ

209
209

Entity Framework Core (EF Core) হলো .NET Core-এর জন্য একটি ওপেন সোর্স ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, যা ডেটাবেসে অবজেক্ট এবং ডেটা টেবিলের মধ্যে সম্পর্ক তৈরি এবং পরিচালনা করতে ব্যবহৃত হয়। EF Core ডেটাবেস পরিচালনা সহজ এবং কার্যকরী করে, এবং ডেভেলপারদের SQL কোড লেখার পরিবর্তে C# কোড ব্যবহার করে ডেটাবেস অপারেশন করতে সহায়তা করে।

EF Core আপনাকে ডেটাবেসের সাথে যোগাযোগ করতে LINQ (Language Integrated Query) ব্যবহার করে ডেটা কুয়েরি করতে দেয় এবং এতে Code First এবং Database First দুটি অ্যাপ্রোচ ব্যবহারের সুবিধা রয়েছে।


EF Core এর প্রধান বৈশিষ্ট্যসমূহ

  • O/R Mapping: EF Core ডেটাবেস টেবিলগুলিকে সি# ক্লাসে ম্যাপ করে এবং ডেটাবেস অপারেশন সম্পাদন করে।
  • Code First: ডেভেলপাররা প্রথমে কোড লিখে মডেল তৈরি করে, তারপর EF Core স্বয়ংক্রিয়ভাবে ডেটাবেস তৈরি করে।
  • Database First: ইতিমধ্যে বিদ্যমান ডেটাবেসের ওপর ভিত্তি করে কোড তৈরি করা যায়।
  • LINQ সমর্থন: EF Core LINQ কুয়েরি সমর্থন করে, যা ডেটাবেসের ডেটাকে আরও সহজে এবং কার্যকরভাবে কুয়েরি করতে সহায়তা করে।
  • মাইগ্রেশন: EF Core ডেটাবেসের স্কিমা আপডেট করতে ডেটাবেস মাইগ্রেশন ব্যবহারের সুবিধা দেয়।
  • ক্রস-প্ল্যাটফর্ম সাপোর্ট: EF Core Windows, macOS এবং Linux এর উপর কাজ করতে সক্ষম।
  • অ্যানোটেশন: Model Validation এবং ডেটা অ্যানোটেশন ব্যবহার করে ডেটাবেসে ভ্যালিডেশন চালানো যায়।

EF Core-এর কাজ করার ধারণা

EF Core ডেটাবেসের সাথে যোগাযোগ করতে DbContext এবং DbSet ক্লাস ব্যবহার করে। DbContext হলো EF Core-এর প্রধান ক্লাস, যা ডেটাবেসের টেবিলগুলির সাথে যোগাযোগ স্থাপন করে এবং DbSet হলো একটি ডেটাবেস টেবিলের প্রতিনিধিত্বকারী কনটেইনার ক্লাস।

DbContext:

DbContext হলো EF Core-এর মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করা ক্লাস। এটি ডেটাবেসের টেবিলগুলোর সাথে সম্পর্কযুক্ত ক্লাসগুলির ডেটাকে ম্যানেজ করে।

DbSet:

DbSet হলো ডেটাবেসের টেবিলের প্রতিনিধিত্বকারী ক্লাস, যেখানে আপনি ডেটার CRUD (Create, Read, Update, Delete) অপারেশন করতে পারেন।


EF Core সেটআপ করা

EF Core সেটআপ করার জন্য আপনাকে প্রথমে NuGet প্যাকেজ ইনস্টল করতে হবে এবং কিছু কনফিগারেশন করতে হবে।

1. NuGet প্যাকেজ ইনস্টল করা

EF Core ব্যবহারের জন্য আপনাকে আপনার ASP.NET Core প্রজেক্টে EF Core প্যাকেজ ইনস্টল করতে হবে। আপনি NuGet Package Manager বা Command Line ব্যবহার করে এই প্যাকেজ ইনস্টল করতে পারেন।

Command Line ব্যবহার করে EF Core ইনস্টল করা:

  • ডটনেট ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য ডাটাবেস প্রোভাইডারের প্যাকেজ ইনস্টল করতে হবে, যেমন SQL Server:

    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    
  • ডেটাবেস মাইগ্রেশন পরিচালনার জন্য Tools প্যাকেজ ইনস্টল করতে হবে:

    dotnet add package Microsoft.EntityFrameworkCore.Tools
    

2. DbContext ক্লাস তৈরি করা

EF Core ব্যবহারের জন্য প্রথমে একটি DbContext ক্লাস তৈরি করতে হবে, যা ডেটাবেসের টেবিলগুলোর সাথে সম্পর্ক স্থাপন করবে।

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
        : base(options)
    {
    }
}

এখানে, Products হলো ডেটাবেসের টেবিলের প্রতিনিধিত্বকারী একটি DbSet যা Product ক্লাসের উপর ভিত্তি করে তৈরি হয়েছে।

3. মডেল ক্লাস তৈরি করা

ডেটাবেসের টেবিলের প্রতিনিধিত্ব করার জন্য একটি মডেল ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, Product ক্লাস:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

এখানে, Product ক্লাস একটি টেবিলের প্রতিনিধিত্ব করছে, যেখানে Id, Name, এবং Price হলো টেবিলের কলাম।

4. ডাটাবেস কনফিগারেশন করা

এখন DbContext ক্লাসটি কনফিগার করতে হবে, যা Startup.cs ফাইলে করা হয়।

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

এখানে, UseSqlServer মেথডের মাধ্যমে SQL Server ব্যবহার করা হয়েছে এবং কনফিগারেশন ফাইলে থাকা DefaultConnection কনেকশন স্ট্রিং ব্যবহার করা হয়েছে।

5. ডেটাবেস মাইগ্রেশন তৈরি করা

ডেটাবেসের স্কিমা তৈরি করতে Entity Framework Core মাইগ্রেশন ব্যবহার করতে হবে। এটি ডেটাবেসের কাঠামো পরিবর্তন করতে সহায়ক।

  • প্রথমে মাইগ্রেশন তৈরি করুন:

    dotnet ef migrations add InitialCreate
    
  • তারপর ডেটাবেস আপডেট করুন:

    dotnet ef database update
    

এটি ডেটাবেসের স্কিমা তৈরি করবে এবং প্রথম মাইগ্রেশন চালাবে।


EF Core এর মাধ্যমে CRUD অপারেশন

EF Core দিয়ে ডেটাবেসে CRUD অপারেশন করতে DbContext এবং DbSet ব্যবহার করা হয়। উদাহরণস্বরূপ, নতুন Product তৈরি করা:

using (var context = new ApplicationDbContext())
{
    var product = new Product
    {
        Name = "Laptop",
        Price = 1000
    };

    context.Products.Add(product);
    context.SaveChanges();
}

এখানে, Add মেথডের মাধ্যমে একটি নতুন Product ডেটাবেসে যোগ করা হয়েছে এবং SaveChanges() মেথডের মাধ্যমে ডেটাবেসে পরিবর্তন সেভ করা হয়েছে।


EF Core এর সুবিধা

  • বিল্ট-ইন মাইগ্রেশন: EF Core সহজেই ডেটাবেস মাইগ্রেশন পরিচালনা করতে সাহায্য করে।
  • কমপ্লেক্স কোয়েরি সহজ করা: LINQ ব্যবহার করে ডেটাবেসে জটিল কুয়েরি চালানো সহজ হয়।
  • ডেটাবেস অপারেশনকে সহজ করা: ডেভেলপারদের SQL কোড না লিখে ডেটাবেস অপারেশন করার সুবিধা দেয়।
  • ক্রস-প্ল্যাটফর্ম সাপোর্ট: EF Core উইন্ডোজ, ম্যাকওএস এবং লিনাক্সে সমানভাবে কাজ করে।

EF Core .NET Core অ্যাপ্লিকেশন ডেভেলপমেন্টে ডেটাবেস অপারেশন এবং ম্যানেজমেন্টের জন্য অত্যন্ত গুরুত্বপূর্ণ একটি টুল। এটি ডেভেলপারদের জন্য ডেটাবেস ম্যানেজমেন্ট সহজ এবং কার্যকরী করে তোলে।

common.content_added_by

Code First এবং Database First পদ্ধতি

256
256

ASP.NET Core এ ডেটাবেস ইন্টিগ্রেশন করার জন্য দুইটি প্রধান পদ্ধতি ব্যবহৃত হয়: Code First এবং Database First। এই দুটি পদ্ধতির মূল পার্থক্য হলো ডেটাবেস ডিজাইন এবং মডেল ক্লাসের মধ্যে সম্পর্ক কীভাবে তৈরি করা হবে তা নিয়ে। নিচে এই দুটি পদ্ধতির বিস্তারিত বর্ণনা দেওয়া হলো।


Code First পদ্ধতি

Code First পদ্ধতিতে, ডেটাবেস মডেল প্রথমে কোডে লেখা হয়। অর্থাৎ, আপনি প্রথমে ক্লাস তৈরি করেন এবং সেগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপ করেন। এরপর EF Core (Entity Framework Core) এর মাধ্যমে ডেটাবেস তৈরি করা হয়।

Code First এর বৈশিষ্ট্য

  • মডেল ভিত্তিক ডিজাইন: আপনি প্রথমে C# ক্লাস তৈরি করেন এবং সেগুলোকে ডেটাবেস টেবিল হিসেবে ব্যবহার করেন।
  • মাইগ্রেশন ব্যবহার করা হয়: ডেটাবেস স্কিমা পরিবর্তন করতে migrations ব্যবহার করা হয়। EF Core কোডে পরিবর্তন অনুসরণ করে ডেটাবেস আপডেট করতে সহায়তা করে।
  • ডেটাবেস সৃষ্টির সুবিধা: কোডের ভিত্তিতে ডেটাবেস তৈরি এবং পরিচালনা করা সহজ হয়।
  • ডেটাবেস ইঞ্জিনের উপর নির্ভরশীলতা কম: ডেটাবেস পরিচালনার কাজ কোডের মধ্যে থাকে, তাই ডেটাবেসের কাঠামো পরিবর্তন করা সহজ হয়।

Code First ব্যবহার করার উদাহরণ

ধরা যাক, আপনি একটি Product ক্লাস তৈরি করতে চান যা ডেটাবেসে একটি Products টেবিলের জন্য ব্যবহৃত হবে।

Model Class (Product.cs):

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

DbContext Class (ApplicationDbContext.cs):

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
    }
}

এখন, migrations এর মাধ্যমে ডেটাবেস তৈরি করতে পারবেন:

dotnet ef migrations add InitialCreate
dotnet ef database update

এভাবে Code First পদ্ধতিতে ডেটাবেস তৈরি করা হয়।


Database First পদ্ধতি

Database First পদ্ধতিতে, ডেটাবেস প্রথমে তৈরি করা হয় এবং তারপর ডেটাবেসের কাঠামো অনুযায়ী C# ক্লাস (Model) তৈরি করা হয়। এতে, ডেটাবেসের উপস্থিতির উপর ভিত্তি করে কোড জেনারেট করা হয়।

Database First এর বৈশিষ্ট্য

  • ডেটাবেস ভিত্তিক ডিজাইন: ডেটাবেস প্রথমে তৈরি করা হয় এবং তারপরে ডেটাবেসের স্কিমা অনুযায়ী ক্লাস তৈরি করা হয়।
  • ডেটাবেসের আগের কাঠামো অনুসরণ করা হয়: যখন ডেটাবেস ইতিমধ্যেই তৈরি থাকে, তখন ক্লাসগুলো সেই ডেটাবেস স্কিমা অনুসারে তৈরি করা হয়।
  • SCHEMA থেকে কোড জেনারেট করা: ডেটাবেসের টেবিল, ভিউ এবং স্টোরড প্রোসিডিউর অনুসারে ক্লাস এবং কনটেক্সট তৈরি করা হয়।
  • ডেটাবেস পরিবর্তন সহজ: যেহেতু ডেটাবেসের কাঠামো আগে থেকেই রয়েছে, ডেটাবেস স্কিমার পরিবর্তন সহজভাবে কোডে প্রতিফলিত হয়।

Database First ব্যবহার করার উদাহরণ

ধরা যাক, আপনি একটি ডেটাবেস তৈরি করেছেন এবং সেটির সাথে মডেল ক্লাস জেনারেট করতে চান। ডেটাবেসের টেবিলগুলি থেকে ক্লাস জেনারেট করতে EF Core Scaffold ব্যবহার করা হয়।

ডেটাবেস থেকে ক্লাস জেনারেট করার জন্য কমান্ড:

dotnet ef dbcontext scaffold "ConnectionString" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models

এতে Products টেবিলের জন্য Product ক্লাস তৈরি হয়ে যাবে। DbContext ক্লাসও তৈরি হবে, যেটি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করবে।


Code First এবং Database First এর মধ্যে পার্থক্য

বৈশিষ্ট্যCode FirstDatabase First
ডেটাবেসের শুরুকোডের মাধ্যমে ডেটাবেস তৈরি করা হয়।ডেটাবেস আগে থেকেই তৈরি থাকে।
ডেটাবেস ডিজাইনকোডে মডেল ক্লাস তৈরি করা হয়।ডেটাবেসের স্কিমা অনুযায়ী কোড তৈরি হয়।
মাইগ্রেশন ব্যবহৃত হয়মাইগ্রেশন ব্যবহার করে ডেটাবেস আপডেট করা হয়।ডেটাবেস তৈরি হয়ে গেলে কোড জেনারেট করা হয়।
ডেটাবেস টেবিল কাস্টমাইজেশনকোডের মধ্যে টেবিল কাস্টমাইজ করা হয়।ডেটাবেসের টেবিলের কাস্টমাইজেশন আগে থেকেই করা থাকে।
ফ্লেক্সিবিলিটিবেশি ফ্লেক্সিবিলিটি, ডেটাবেস এবং কোডের কাঠামো একত্রে কন্ট্রোল করা যায়।কম ফ্লেক্সিবিলিটি, কারণ ডেটাবেস আগে থেকেই তৈরি থাকে।

কখন কোন পদ্ধতি ব্যবহার করবেন

  • Code First পদ্ধতি ব্যবহার করুন যখন:
    • নতুন অ্যাপ্লিকেশন তৈরি করছেন এবং ডেটাবেস স্কিমা আপনার কোডের সাথে সামঞ্জস্যপূর্ণ করতে চান।
    • ডেটাবেসের কাঠামো পরিবর্তন করতে চান এবং সেই পরিবর্তনগুলো কোডে মাইগ্রেট করতে চান।
  • Database First পদ্ধতি ব্যবহার করুন যখন:
    • ডেটাবেস ইতিমধ্যেই প্রস্তুত এবং আপনি সেই ডেটাবেসের সাথে যুক্ত মডেল এবং কোড তৈরি করতে চান।
    • পূর্ববর্তী ডেটাবেস কাঠামোর সঙ্গে কাজ করতে চান, যেমন বিদ্যমান ডেটাবেসে কাজ করতে গেলে।

Code First এবং Database First উভয় পদ্ধতিই Entity Framework Core এর শক্তিশালী ফিচার, এবং আপনার প্রজেক্টের প্রয়োজন অনুযায়ী যে কোন পদ্ধতি ব্যবহার করা যেতে পারে।

common.content_added_by

DbContext এবং Model তৈরি করা

209
209

ASP.NET Core-এ DbContext এবং Model ব্যবহার করে ডাটাবেসের সঙ্গে কাজ করা যায়। Entity Framework Core (EF Core) এর মাধ্যমে ডাটাবেস অ্যাক্সেসের জন্য এই দুইটি গুরুত্বপূর্ণ উপাদান ব্যবহৃত হয়। DbContext ডাটাবেসের সংযোগ পরিচালনা করে, এবং Model ডাটাবেস টেবিলের গঠন উপস্থাপন করে।


DbContext কী?

DbContext হলো Entity Framework Core এর একটি ক্লাস, যা ডাটাবেস সংযোগ এবং ডাটাবেসের সঙ্গে CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করার জন্য ব্যবহৃত হয়। এটি ডাটাবেস এবং অ্যাপ্লিকেশন লজিকের মধ্যে একটি ব্রিজ হিসেবে কাজ করে।


Model কী?

Model হলো ডোমেইন ক্লাস যা ডাটাবেস টেবিলের কাঠামোকে উপস্থাপন করে। প্রতিটি Model ডাটাবেস টেবিলের একটি রেকর্ড বা এনটিটির প্রতিনিধিত্ব করে।


DbContext এবং Model তৈরি করার ধাপসমূহ

প্রয়োজনীয় প্যাকেজ ইন্সটল করা

প্রথমে, Entity Framework Core এবং ডাটাবেস প্রোভাইডারের জন্য প্রয়োজনীয় NuGet প্যাকেজ ইনস্টল করুন। উদাহরণস্বরূপ, যদি SQL Server ব্যবহার করেন:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Model তৈরি করা

Model ক্লাস হলো একটি সাধারণ C# ক্লাস যা ডাটাবেস টেবিলের কলামগুলোর প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, একটি Student টেবিলের জন্য Model হতে পারে:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

DbContext তৈরি করা

DbContext একটি কাস্টম ক্লাস, যা Entity Framework Core এর DbContext ক্লাস থেকে ইনহেরিট করে। এতে ডাটাবেসের টেবিল বা এনটিটির জন্য DbSet প্রপার্টি থাকে।

using Microsoft.EntityFrameworkCore;

public class SchoolContext : DbContext
{
    public SchoolContext(DbContextOptions<SchoolContext> options) : base(options) { }

    public DbSet<Student> Students { get; set; }
}

বিশ্লেষণ:

  • DbContextOptions<SchoolContext> DbContext কনফিগারেশন পরিচালনা করে।
  • DbSet<Student> Students টেবিলের প্রতিনিধিত্ব করে, যার মাধ্যমে ডাটাবেসে CRUD অপারেশন সম্পন্ন করা যাবে।

DbContext কনফিগার করা

Program.cs ফাইলে DbContext কনফিগার করতে হবে, যেখানে ডাটাবেস কানেকশন স্ট্রিং উল্লেখ করা হবে।

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddDbContext<SchoolContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

কানেকশন স্ট্রিং যোগ করা

appsettings.json ফাইলে ডাটাবেসের কানেকশন স্ট্রিং যোগ করুন:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=SchoolDB;Trusted_Connection=True;"
  }
}

DbContext এবং Model ব্যবহার

ডাটাবেসে ডেটা যোগ করা

DbContext এর মাধ্যমে ডাটাবেসে নতুন ডেটা যোগ করা যায়:

using (var context = new SchoolContext(options))
{
    var student = new Student { Name = "John Doe", Age = 20 };
    context.Students.Add(student);
    context.SaveChanges();
}

ডাটাবেস থেকে ডেটা পড়া

DbContext এর মাধ্যমে ডাটাবেস থেকে ডেটা পড়া যায়:

using (var context = new SchoolContext(options))
{
    var students = context.Students.ToList();
    foreach (var student in students)
    {
        Console.WriteLine($"{student.Name} - {student.Age}");
    }
}

DbContext এবং Model এর কার্যপ্রক্রিয়া

  1. Model ডাটাবেস টেবিলের প্রতিনিধিত্ব করে।
  2. DbContext ডাটাবেস কানেকশন এবং অপারেশন পরিচালনা করে।
  3. DbSet ব্যবহার করে Model এর মাধ্যমে ডাটাবেস টেবিল অ্যাক্সেস করা হয়।
  4. ডেটাবেস অপারেশন সম্পন্ন করতে LINQ এবং Entity Framework এর বিভিন্ন পদ্ধতি ব্যবহার করা হয়।

DbContext এবং Model ASP.NET Core অ্যাপ্লিকেশনের ডাটাবেস ইন্টিগ্রেশনের একটি শক্তিশালী এবং কার্যকরী মাধ্যম। এটি ডেভেলপারদের ডাটাবেস অপারেশন সহজ এবং মডিউলার করার সুযোগ দেয়।

common.content_added_by

CRUD অপারেশন (Create, Read, Update, Delete)

248
248

CRUD (Create, Read, Update, Delete) হলো ডেটাবেজ অপারেশন পরিচালনার একটি মৌলিক পদ্ধতি, যা অধিকাংশ অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। ASP.NET Core-এ, CRUD অপারেশনগুলি সাধারণত Entity Framework Core (EF Core) ব্যবহার করে করা হয়, যা একটি Object-Relational Mapping (ORM) টুল এবং ডেটাবেজের সাথে কাজ করার জন্য খুবই শক্তিশালী।

CRUD অপারেশনগুলোর মাধ্যমে ব্যবহারকারীদের ইনপুট গ্রহণ, ডেটা প্রদর্শন, ডেটা আপডেট করা এবং ডেটা মুছে ফেলা যায়। ASP.NET Core অ্যাপ্লিকেশনে এই অপারেশনগুলো করতে Entity Framework Core ব্যবহৃত হয়।


1. Create (তৈরি করা)

Create অপারেশন ডেটাবেজে নতুন রেকর্ড যোগ করার জন্য ব্যবহৃত হয়। ASP.NET Core-এ এটি সাধারণত POST রিকোয়েস্টের মাধ্যমে করা হয়, যেখানে ডেটা ফর্মের মাধ্যমে সার্ভারে পাঠানো হয়।

উদাহরণ:

এখানে একটি Product নামক মডেল তৈরি করা হলো এবং একটি নতুন প্রোডাক্ট ডেটাবেজে অ্যাড করার জন্য Create মেথড ব্যবহার করা হয়েছে।

Product.cs মডেল

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

ProductsController.cs

public class ProductsController : Controller
{
    private readonly ApplicationDbContext _context;

    public ProductsController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: Products/Create
    public IActionResult Create()
    {
        return View();
    }

    // POST: Products/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("Id,Name,Price")] Product product)
    {
        if (ModelState.IsValid)
        {
            _context.Add(product);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(product);
    }
}

এখানে Create মেথডটি ব্যবহারকারী থেকে ইনপুট নিয়ে সেই ইনপুটকে ডেটাবেজে সেভ করবে।


2. Read (পড়া)

Read অপারেশন ডেটাবেজ থেকে ডেটা পড়তে ব্যবহৃত হয়। এটি সাধারণত GET রিকোয়েস্টের মাধ্যমে করা হয়, যেখানে ডেটা ডেটাবেজ থেকে অ্যাক্সেস করা হয় এবং ব্যবহারকারীকে দেখানো হয়।

উদাহরণ:

এখানে আমরা Product মডেল থেকে ডেটা পড়ছি এবং অ্যাকশন রিটার্ন করছি যাতে সেই ডেটা ভিউতে প্রদর্শিত হয়।

ProductsController.cs

// GET: Products
public async Task<IActionResult> Index()
{
    return View(await _context.Products.ToListAsync());
}

এই মেথডটি সমস্ত Product গুলি ডেটাবেজ থেকে পড়বে এবং ভিউতে প্রদর্শন করবে।

Index.cshtml (View)

@foreach (var product in Model)
{
    <div>
        <h3>@product.Name</h3>
        <p>@product.Price</p>
    </div>
}

3. Update (আপডেট করা)

Update অপারেশন ডেটাবেজে একটি বিদ্যমান রেকর্ড আপডেট করতে ব্যবহৃত হয়। এটি PUT বা PATCH রিকোয়েস্টের মাধ্যমে করা হয় এবং ডেটাবেজে থাকা একটি রেকর্ডের তথ্য পরিবর্তন করে।

উদাহরণ:

এখানে একটি প্রোডাক্ট আপডেট করার উদাহরণ দেওয়া হল।

ProductsController.cs

// GET: Products/Edit/5
public async Task<IActionResult> Edit(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var product = await _context.Products.FindAsync(id);
    if (product == null)
    {
        return NotFound();
    }
    return View(product);
}

// POST: Products/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Name,Price")] Product product)
{
    if (id != product.Id)
    {
        return NotFound();
    }

    if (ModelState.IsValid)
    {
        try
        {
            _context.Update(product);
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!ProductExists(product.Id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }
        return RedirectToAction(nameof(Index));
    }
    return View(product);
}

এখানে Edit মেথডটি নির্দিষ্ট Product-এর তথ্য লোড করে এবং সেই তথ্য আপডেট করার জন্য ডেটাবেজে পাঠায়।


4. Delete (মুছে ফেলা)

Delete অপারেশন ডেটাবেজ থেকে একটি রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। এটি DELETE রিকোয়েস্টের মাধ্যমে করা হয় এবং ডেটাবেজ থেকে একটি রেকর্ড স্থায়ীভাবে মুছে ফেলে।

উদাহরণ:

এখানে একটি প্রোডাক্ট ডিলিট করার উদাহরণ দেওয়া হলো।

ProductsController.cs

// GET: Products/Delete/5
public async Task<IActionResult> Delete(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var product = await _context.Products
        .FirstOrDefaultAsync(m => m.Id == id);
    if (product == null)
    {
        return NotFound();
    }

    return View(product);
}

// POST: Products/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var product = await _context.Products.FindAsync(id);
    _context.Products.Remove(product);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
}

এখানে DeleteConfirmed মেথডটি প্রোডাক্টটি ডেটাবেজ থেকে মুছে ফেলে।


সারাংশ

CRUD অপারেশন (Create, Read, Update, Delete) হলো ডেটাবেজের মূল কার্যকলাপ এবং এটি যেকোনো ডেটা-চালিত অ্যাপ্লিকেশনে ব্যবহৃত হয়। ASP.NET Core-এ Entity Framework Core (EF Core) ব্যবহার করে এই অপারেশনগুলো সহজেই করা যায়। এর মাধ্যমে আপনি নতুন ডেটা তৈরি, ডেটা পড়া, ডেটা আপডেট এবং ডেটা মুছে ফেলার মতো কাজগুলি খুব সহজে করতে পারবেন।

common.content_added_by

LINQ ব্যবহার করে ডেটা কুয়েরি করা

244
244

LINQ (Language Integrated Query) হলো .NET এর একটি শক্তিশালী ফিচার, যা ডেটা সোর্সের উপর কুয়েরি চালানোর জন্য ব্যবহার করা হয়। LINQ ব্যবহার করে SQL ডেটাবেস, XML ডকুমেন্ট, কালেকশন (Lists, Arrays), এবং আরও বিভিন্ন ধরনের ডেটা কুয়েরি করা যায়। এটি ডেভেলপারদের জন্য সহজ এবং রিডেবল কুয়েরি লেখার সুযোগ দেয়, যা টাইপ-সেফ এবং কম্পাইল টাইমে যাচাইযোগ্য।


LINQ এর মূল কাঠামো

LINQ সাধারণত দুইভাবে লেখা যায়:

  • Query Syntax: SQL-এর মতো স্টাইল ব্যবহার করে কুয়েরি লেখা।
  • Method Syntax: Extension Methods (যেমন .Where(), .Select(), .OrderBy()) ব্যবহার করে কুয়েরি লেখা।

LINQ ব্যবহার করে ডেটা কুয়েরি করার উদাহরণ

১. ইন-মেমোরি ডেটা সোর্সের উপর কুয়েরি

ডেটাসেট প্রস্তুত:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Query Syntax:
var evenNumbers = from number in numbers
                  where number % 2 == 0
                  select number;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}
Method Syntax:
var evenNumbers = numbers.Where(number => number % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

২. ক্লাস অবজেক্টের উপর কুয়েরি

ডেটাসেট প্রস্তুত:
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

List<Product> products = new List<Product>
{
    new Product { Id = 1, Name = "Laptop", Price = 800 },
    new Product { Id = 2, Name = "Mouse", Price = 20 },
    new Product { Id = 3, Name = "Keyboard", Price = 30 },
    new Product { Id = 4, Name = "Monitor", Price = 150 }
};
Query Syntax:
var expensiveProducts = from product in products
                        where product.Price > 100
                        select product;

foreach (var product in expensiveProducts)
{
    Console.WriteLine($"{product.Name}: ${product.Price}");
}
Method Syntax:
var expensiveProducts = products.Where(p => p.Price > 100);

foreach (var product in expensiveProducts)
{
    Console.WriteLine($"{product.Name}: ${product.Price}");
}

LINQ এর বিভিন্ন অপারেশন

১. Filtering: ডেটা ফিল্টার করার জন্য Where() ব্যবহার করা হয়।

var filteredProducts = products.Where(p => p.Price > 50);

২. Sorting: ডেটা সাজানোর জন্য OrderBy() এবং OrderByDescending() ব্যবহার করা হয়।

var sortedProducts = products.OrderBy(p => p.Price); // Ascending
var sortedProductsDesc = products.OrderByDescending(p => p.Price); // Descending

৩. Projection: নির্দিষ্ট ফিল্ড নির্বাচন করতে Select() ব্যবহার করা হয়।

var productNames = products.Select(p => p.Name);

foreach (var name in productNames)
{
    Console.WriteLine(name);
}

৪. Aggregation: ডেটার উপর যোগফল, গড় ইত্যাদি হিসাব করতে Sum(), Average(), Count() ব্যবহার করা হয়।

var totalPrice = products.Sum(p => p.Price); // Total Price
var averagePrice = products.Average(p => p.Price); // Average Price
var productCount = products.Count(); // Total Count

৫. Group By: ডেটা গ্রুপ করতে GroupBy() ব্যবহার করা হয়।

var groupedProducts = products.GroupBy(p => p.Price > 100 ? "Expensive" : "Affordable");

foreach (var group in groupedProducts)
{
    Console.WriteLine($"{group.Key} Products:");
    foreach (var product in group)
    {
        Console.WriteLine($" - {product.Name}");
    }
}

৬. Joining: একাধিক ডেটা সোর্স একত্রিত করতে Join() ব্যবহার করা হয়।

List<Category> categories = new List<Category>
{
    new Category { Id = 1, Name = "Electronics" },
    new Category { Id = 2, Name = "Accessories" }
};

var productCategories = products.Join(categories,
    product => product.Id,
    category => category.Id,
    (product, category) => new
    {
        ProductName = product.Name,
        CategoryName = category.Name
    });

foreach (var item in productCategories)
{
    Console.WriteLine($"{item.ProductName} belongs to {item.CategoryName} category.");
}

LINQ এবং Entity Framework Core

LINQ শুধুমাত্র ইন-মেমোরি ডেটা কুয়েরি করার জন্য নয়, এটি Entity Framework Core এর সঙ্গে ডেটাবেস কুয়েরির জন্যও ব্যবহৃত হয়।

উদাহরণ:
var expensiveProducts = context.Products
                               .Where(p => p.Price > 100)
                               .OrderBy(p => p.Name)
                               .ToList();

foreach (var product in expensiveProducts)
{
    Console.WriteLine($"{product.Name}: ${product.Price}");
}

LINQ এর সুবিধা

  • টাইপ-সেফ: কম্পাইল টাইমে ডেটা টাইপ যাচাই করা হয়।
  • রিডেবল: SQL-এর মতো সিনট্যাক্সের কারণে এটি বুঝতে সহজ।
  • ডাইনামিক কুয়েরি: একই কুয়েরি বিভিন্ন ধরনের ডেটা সোর্সে প্রয়োগ করা যায়।
  • প্রোডাক্টিভিটি বৃদ্ধি: সহজ সিনট্যাক্স এবং অল্প কোডের মাধ্যমে জটিল কুয়েরি করা যায়।

LINQ ডেটা কুয়েরি করার একটি শক্তিশালী এবং কার্যকর পদ্ধতি, যা ডেভেলপারদের প্রোডাক্টিভিটি বাড়াতে সহায়তা করে। এটি ইন-মেমোরি ডেটা এবং ডেটাবেস উভয়ের সঙ্গেই কাজ করতে পারে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion